//int main() {
//	Solution().maxNumberOfAlloys(3, 2, 15, { {1,1,1},{1,1,10} }, { 0,0,0 }, { 1,2,3 });
//}
//#include <iostream>
//#include <string>
//#include <map>
//using namespace std;
//int main() {
//	string mode;
//	cin >> mode;
//	map<string, string> mm;
//	mm["N"] = "S";
//	mm["S"] = "N";
//	mm["E"] = "W";
//	mm["W"] = "E";
//	mm["NE"] = "SW";
//	mm["SW"] = "NE";
//	mm["NW"] = "SE";
//	mm["SE"] = "NW";
//	cout << mm[mode] << endl;
//	return 0;
//}
//int main()
//{
//	int a, b;  cin >> a >> b;
//	vector<vector<char>> mapa(a, vector<char>(a,0)), mapb(b, vector<char>(b));
//
//	for (int i = 0; i < a; i++) for (int j = 0; j < a; j++)
//		cin >> mapa[i][j];
//	for (int i = 0; i < b; i++) for (int j = 0; j < b; j++)
//		cin >> mapb[i][j];
//	auto fun = [&](int x, int y) {
//		for (int m1 = 0; m1 < b; m1++) {
//			for (int m2 = 0; m2 < b; m2++)
//			{
//				if (mapa[x + m1][y + m2] != mapb[m1][m2])
//					return false;
//			}
//		}
//		return true;
//		};
//	for (int x = 0; x + b <= a; x++) {
//		for (int y = 0; y + b <= a; y++)
//		{
//			if (fun(x, y)) {
//				cout << x << ' ' << y << endl;
//				return 0;
//
//			}
//		}
//	}
//	return 0;
//}
struct H;
struct P {
	struct H* pre = nullptr;
};
struct H {
	int num = 1;
};
int main() {
	int n, q, ans = 0;  cin >> n >> q;
	vector<P> pigeons(n);
	vector<H> nests(n);
	while (q--) {
		int work = 0; cin >> work;
		if (work == 1) {
			int p, h;  cin >> p >> h;
			p--, h--;
			if (pigeons[p].pre != nullptr) {
				if (--pigeons[p].pre->num == 1) {
					ans--;
				}
			}
			else {
				// nullptr
				if (--nests[p].num == 1) {
					ans--;
				}
			}
			pigeons[p].pre = &nests[h];
			if (nests[h].num++ == 1) {
				ans++;
			}
		}
		else {
			cout << ans << endl;
		}

	}
	return 0;
}